@echo off
chcp 65001 >nul
title 终极排查模拟位置问题
color 0C

echo.
echo ========================================
echo    终极排查 - 一步步验证
echo ========================================
echo.

echo 第1步：确认重启后已重新设置模拟位置
echo.
echo 请确认：
echo 1. 重启后是否运行了 .\一键设置模拟位置.bat？
echo 2. 是否在"模拟定位"应用中重新点击地图设置位置？
echo 3. 应用是否显示了模拟位置？
echo.

pause

echo.
echo ========================================
echo 第2步：验证系统Mock Provider状态
echo ========================================
echo.

echo 查看当前Mock Provider：
adb shell dumpsys location | findstr /C:"mock" /C:"Mock" | findstr /C:"provider"

echo.
pause

echo.
echo 查看最后的位置（应该是模拟坐标）：
adb shell dumpsys location | findstr "last mock location"

echo.
pause

echo.
echo ========================================
echo 第3步：检查定位模式
echo ========================================
echo.

echo 当前定位模式：
adb shell settings get secure location_mode
echo.
echo 说明：
echo 0 = 关闭
echo 1 = 仅设备（GPS only）
echo 2 = 省电模式（WiFi/基站）
echo 3 = 高精度（GPS + WiFi + 基站）
echo.

echo 当前允许的定位提供者：
adb shell settings get secure location_providers_allowed

echo.
pause

echo.
echo ========================================
echo 第4步：强制设置为仅GPS模式
echo ========================================
echo.

echo 这会禁用WiFi和基站定位，只使用GPS（已被模拟）
echo.

choice /C YN /M "是否设置为仅GPS模式"

if errorlevel 2 goto :skip_gps_only
if errorlevel 1 goto :set_gps_only

:set_gps_only
echo.
echo 正在设置为仅GPS模式...
adb shell settings put secure location_mode 1
echo ✓ 已设置

echo.
echo 验证：
adb shell settings get secure location_mode

goto :test_basic

:skip_gps_only
echo.
echo 跳过GPS only设置

:test_basic
echo.
echo ========================================
echo 第5步：使用最基础的测试
echo ========================================
echo.

echo 安装一个最简单的GPS测试应用
echo 这是验证系统GPS是否真的被模拟的唯一准确方法
echo.

echo 请手动安装GPS Test应用：
echo - 方式1：从Google Play商店下载"GPS Test"
echo - 方式2：从APKPure下载GPS Test APK
echo.

echo 安装后打开GPS Test，查看显示的坐标
echo.

pause

echo.
echo ========================================
echo 第6步：测试系统设置中的位置
echo ========================================
echo.

echo 请在手机上操作：
echo.
echo 1. 打开 设置 → 位置信息
echo 2. 查看显示的当前位置
echo 3. 是否显示模拟的坐标？
echo.

choice /C YN /M "系统设置中是否显示模拟位置"

if errorlevel 2 goto :system_fail
if errorlevel 1 goto :system_ok

:system_ok
echo.
echo ✓ 系统设置显示模拟位置 = 系统GPS正常
echo 问题在于应用层面
goto :test_apps

:system_fail
echo.
echo ✗ 系统设置都不显示模拟位置
echo 这说明Mock Provider没有真正生效
echo.

echo 可能原因：
echo 1. 小米手机的特殊限制
echo 2. 需要在开发者选项中选择模拟位置应用
echo 3. 权限问题
echo.

echo 请检查：
echo 开发者选项 → 选择模拟位置信息应用 → 是否选择了你的应用？
echo.

pause

echo.
echo 重新授权：
adb shell appops set com.example.munidingwei android:mock_location allow
echo ✓ 完成

echo.
echo 验证：
adb shell appops get com.example.munidingwei android:mock_location

echo.
echo 请重新打开模拟定位应用，设置位置
echo 然后再次检查系统设置中的位置
echo.

pause
goto :end

:test_apps
echo.
echo ========================================
echo 第7步：逐个测试应用
echo ========================================
echo.

echo 测试1：关闭WiFi和移动数据
echo.
echo 请手动操作：
echo 1. 下拉通知栏
echo 2. 关闭WiFi
echo 3. 关闭移动数据
echo.
echo 这样应用只能使用GPS定位
echo.

pause

echo.
echo 测试微信位置分享...
echo.

adb shell am force-stop com.tencent.mm
timeout /t 2 >nul

echo.
echo 请打开微信，发送位置，查看结果
echo.

choice /C YN /M "关闭网络后，微信是否显示模拟位置"

if errorlevel 2 goto :network_issue
if errorlevel 1 goto :network_ok

:network_ok
echo.
echo ✓ 关闭网络后成功！
echo.
echo 结论：应用使用WiFi/基站定位绕过了GPS
echo.
echo 解决方案：
echo 1. 使用时关闭WiFi和移动数据（临时方案）
echo 2. 需要ROOT权限才能完全模拟所有定位方式
echo 3. 使用Xposed框架模块（需要ROOT）
echo.
goto :end

:network_issue
echo.
echo ✗ 关闭网络后还是不行
echo.
echo 这很奇怪...让我们检查更多细节
echo.

echo.
echo 当前系统GPS状态：
adb shell dumpsys location | findstr "gps provider" -A 3

echo.
pause

echo.
echo ========================================
echo 第8步：手机品牌特殊检查
echo ========================================
echo.

echo 手机品牌：
adb shell getprop ro.product.manufacturer

echo 手机型号：
adb shell getprop ro.product.model

echo Android版本：
adb shell getprop ro.build.version.release

echo MIUI版本（如果是小米）：
adb shell getprop ro.miui.ui.version.name 2>nul

echo.
echo 小米手机额外要求：
echo 1. 设置 → 应用设置 → 应用管理 → 你的应用 → 权限管理
echo 2. 查看是否有"模拟位置"权限
echo 3. 开发者选项 → 选择模拟位置信息应用 → 选择你的应用
echo.

pause

echo.
echo ========================================
echo 第9步：检查应用是否在检测mock标记
echo ========================================
echo.

echo 某些应用会检测Location.isMock()标记
echo 如果检测到mock=true，就拒绝使用
echo.

echo 需要ROOT权限才能隐藏mock标记
echo.

echo 手机是否已ROOT？
choice /C YN /M "你的手机是否已ROOT"

if errorlevel 2 goto :no_root
if errorlevel 1 goto :has_root

:has_root
echo.
echo 如果已ROOT，可以使用：
echo 1. Xposed框架 + Fake Location模块
echo 2. Magisk + Location Mock模块
echo.
echo 这些工具可以隐藏mock标记
echo.
goto :end

:no_root
echo.
echo 没有ROOT的情况下：
echo.
echo ✓ 可以正常工作的应用：
echo - GPS Test（100%%）
echo - 微信位置分享（通常可以）
echo - 高德地图基础功能（部分可以）
echo.
echo ✗ 可能检测模拟位置的应用：
echo - 百度地图（可能检测）
echo - 滴滴等打车应用（会检测）
echo - 银行、支付类应用（会检测）
echo.

:end
echo.
echo ========================================
echo 排查完成
echo ========================================
echo.

echo 📝 总结建议：
echo.
echo 1. 首先安装GPS Test验证系统GPS是否真的被模拟
echo 2. 如果GPS Test显示模拟位置，说明系统正常
echo 3. 应用不行则是应用层面的检测问题
echo 4. 可以使用：关闭网络+仅GPS模式
echo 5. 完美方案需要ROOT权限
echo.

pause

